#pragma once

#include "Component.h"
#include "TileWorld.h"
#include "Size.h"
#include "Point.h"

namespace game_engine { namespace components
{

/*!
 * \class Terrain
 * \brief 
 */
class Terrain : public Component
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
    string tileInfoFile;
    string tileTextureFile;
    tile_engine::TileWorld tileWorld;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    Terrain(void);
    Terrain(GameObject *obj, const string &infoFile, const string &textFile);
    virtual ~Terrain(void);

    // Others
    void initialize(void) throw(...);
    //void update(void);
    void render(void) throw(...);

    // Getters
    const utils::Size getDimensions(void) const;
    const vector<tile_engine::Tile*> getSurroundingTiles(const utils::Point 
        &worldPosition) const;

    // Setters
    void setTileInfoFile(const string &file);
    void setTileTextureFile(const string &file);

};

}}
